# -*- coding: utf-8 -*-
"""
@Time ：2021/3/31 10:28 
@Auth ： Mr. William 1052949192
@Company ：特斯汀学院 @testingedu.com.cn
@Function ：Excel数据驱动
"""
import os

import pytest

from common.excel.Excel import get_reader, get_writer
from keywords.webkeys import Web


class Conf:
    """读取excel数据，做成参数化"""

    def __init__(self):
        # 所有用例的数据列表
        self.feature = ''
        self.story = ''
        # 设置序号，防止乱序
        self.feature_idx = 0
        self.story_idx = 0
        self.web = Web()
        # 用来记录模块下的用例，并使用pytest参数化
        self.cases = []
        # 用来记录最初的pytest测试模块名字
        self.name = "web"
        # 记录上一次运行后测试模块文件名
        self.last_story = self.name

    def runCase(self, case_path='./lib/电商项目用例.xlsx', result_path='./lib/result-电商项目用例.xlsx'):
        # 一个sheet页面一个sheet页面读
        reader = get_reader(case_path)
        writer = get_writer(case_path, result_path)
        sheetname = reader.get_sheets()
        for sheet in sheetname:
            # 设置大模块名
            self.feature = sheet
            self.feature_idx += 1
            self.story_idx = 0
            # 设置当前读写的sheet页面
            reader.set_sheet(sheet)
            writer.set_sheet(sheet)
            lines = reader.readline()

            # 记录一个case
            case = []

            # 处理出来每一个case的数据列表
            for i in range(1, len(lines)):
                line = lines[i]
                print(line)
                # 如果是模块分组，则设置模块名
                if len(line[0]) > 1:
                    # 如果有用例未添加到cases则添加
                    if case:
                        self.cases.append(case)
                        case = []
                    # 执行模块中所有用例
                    if self.cases:
                        self.__run_story()

                    self.story = line[0]
                    self.story_idx += 1

                # 如果第二列有内容，那么就是case的开始
                elif len(line[1]) > 1:
                    if case:
                        self.cases.append(case)
                        # 重置，存放下一个用例
                        case = []
                    case.append(line)
                else:
                    case.append(line)

            # 当一个sheet读完，我们需要保存最后一个用例
            if case:
                self.cases.append(case)

            if self.cases:
                self.__run_story()

        os.rename('./common/ddt/test_%s.py' % self.last_story, './common/ddt/test_%s.py' % self.name)

    def __run_story(self):
        print(self.cases)
        print(self.story)
        os.rename('./common/ddt/test_%s.py' % self.last_story, './common/ddt/test_%s.py' % self.story)
        self.last_story = self.story
        pytest.main(['-s', './common/ddt/test_%s.py' % self.story, '--alluredir', './result'])
        self.cases.clear()


conf = Conf()
